﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="AAuto" /> 
<title>事件接口</title>
<link href="../style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="maincontent">
<h1>事件接口</h1>
 <div class="desc">参考:<a href="../libraries/std/web/html.html"></a> <a href="webform.html">创建web窗体</a></div>
  <div>
    <h2>事件接口</h2>
    <p>web窗体实现了web事件接口. 当web窗体产生事件时(例如下载完开始,下载完成等),会查询web窗体对象是否定义了相关的事件函数,如果有相应的事件函数,则自动调用该函数.</p>
<p>例如,对于一个web窗体对象wb,在用户在网页上右键点击网页时,如果自定义wb.showMenu事件函数,则调用该函数显示自定义的菜单,否则显示默认的菜单.</p>
    <p>每一个事件函数都是一个触发器函数、一个回调函数。在web窗体产生事件时通过回调触发事件函数.</p>
    <div class="tip">&nbsp;本手册中约定使用 wb变量名表示web.form类创建的web窗体对象.使用ele表示web窗体中的元素对象,这也是AAuto中默认约定具有特殊意义的变量名,不应将这些默认变量名用于其他目的.</div>
    <p>我们可以在快手开发环境中查看&quot;标准库&quot;窗口,选中web.form库,右键点击库,在弹出菜单中选择编辑源代码.<br />
    打开web.form库,查看该库的源代码,可以看到在web.form构造函数的尾部有一句添加事件接口的代码.</p>
    <pre>var sink, cookie =..com.Connect(this._browser, this );</pre>
    <p>com.Connect函数将指定的事件接口(table对象,第二个参数)连接到com对象. 正是因为调用了这句代码,使web窗体拥有自定义事件函数的功能.</p>
</div>
<div>
  <h2>wb.showMenu </h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.showMenu=function(x,y,id,ele){
    return 是否显示默认菜单; 
}</pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br /> 
    当用户右键点击网页上的元素时,触发此事件,如果未定义些事件函数,弹出默认右键菜单.<br />
    x,y表示右键点击的坐标,而ele表示发生事件的节点对象,
    id表示节点的类型,有以下值:</p>
  <table class="dataintable">
    <tr>
      <th>id</th>
      <th>说明</th>
    </tr>
    <tr>
      <td> 0/*_CONTEXT_MENU_DEFAULT */</td>
      <td>默认右键菜单</td>
    </tr>
    <tr>
      <td> 1/*_CONTEXT_MENU_IMAGE*/</td>
      <td>图片右键菜单</td>
    </tr>
    <tr>
      <td>2/*_CONTEXT_MENU_CONTROL*/</td>
      <td>控件右键菜单</td>
    </tr>
    <tr>
      <td>3/*ONTEXT_MENU_TABLE*/</td>
      <td>表格</td>
    </tr>
    <tr>
      <td>4/*_CONTEXT_MENU_TEXTSELECT */</td>
      <td>文本选区右键菜单</td>
    </tr>
    <tr>
      <td>5/*_CONTEXT_MENU_ANCHOR*/</td>
      <td>锚点,超链接</td>
    </tr>
    <tr>
      <td>6/*_CONTEXT_MENU_UNKNOWN/</td>
      <td>未知</td>
    </tr>
    <tr>
      <td>10/*_CONTEXT_MENU_VSCROLL*/</td>
      <td>垂直滚动条</td>
    </tr>
    <tr>
      <td>11/*_CONTEXT_MENU_VSCROLL*/</td>
      <td>水平滚动条</td>
    </tr>
  </table>
  <p><strong>3、调用示例：
  </strong></p>
  </p>
  <pre>wb.showMenu=function(x,y,id,ele){

   if( id == 4/*_CONTEXT_MENU_TEXTSELECT */ )
       return true;//如果用户显示的是文本,显示默认菜单
	
	//自定义弹出菜单
	popmenu = win.ui.popmenu(winform);
	popmenu.add('显示节点内容',function(id){
		win.msgbox( ele.innerHTML )
		
	}); 
	
	popmenu.popup(x,y,true)

   return false; //禁用默认菜单
}
</pre>
</div>
<div>
  <h2>wb.showMsg <a name="showMsg"></a></h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.showMsg=function( 提示信息, 对话框标题 ){

    return 是否显示对话框;
}</pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br /> 
    该事件在网页弹出对话框以前触发,这里指的对话框指网页脚本创建的对话框,例如javascript中的alert函数创建的对话框,函数有两个参数可以获取对话框的标题,而通过返回值可以控制对话框是否弹出.</p>
  <p>有些javascript脚本通过对话框获取用户的输入,这时候,我们可以使用 wb.doScript(&quot;要执行的javascript脚本&quot;) 以执行网页脚本来绕过对话框实现目的功能.</p>
  <p>还有一种方法,就是让对话框弹出来,再自动点击指定的按钮,并关闭对话框.我们知道,对话框弹出以后,程序就一直等待用户的操作,不会执行对话框后面的代码,因此:我们需要在对话框弹出之前创建一个后台线程,来关闭弹出的对话框,请看下面的示例.</p>
  <p><strong>3、调用示例：
  </strong></p>
  </p>
  <pre><span class="comment">//....省略创建web窗体的代码,请在快手中点击&quot;主菜单-&gt;新建文件-&gt;新建web窗体&quot;</span>

wb.showMsg=function(text/*信息*/,caption/*标题*/){

    closeDlg_t = function(title) {
          import winex;
          var hwnd,hctr =   winex.waitActive(title, ,&quot;#32770&quot;,&quot;Button&quot;);   
          winex.click(hctr); 
    }
    thread.create(closeDlg_t,caption/*传递参数给线程*/ )
    return true; /*返回false则不显示对话框*/
}   

//打开目标网站
wb.write(&quot;&lt;script&gt;alert('你好吗')&lt;/script&gt;&quot; 
</pre>
</div>
<div>
  <h2>wb.NewWindow2 <a name="newwindow"></a></h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.NewWindow2=function( ppDisp, Cancel) {
　
	return owner.openproxy /*创建代理窗口捕获网址并在当前窗口打开*/  
	
	return ppDisp, true; /*第二个返回值如果为真，则取消新窗口*/
	/*新建的web窗体，并将application作为返回值，则在该web窗口中打开*/
	return ppDisp, Cancel
} 
 
  </pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br />
    弹出新窗口以前触发,有两个输出参数:ppDisp, Cancel<br />
    ppDisp如果返回其他web窗体的   application成员,则在该web窗体中打开新窗口.<br />
    Cancel返回值指示web窗体是否取消该弹出窗口.例如:return ppDisp,true将会取消弹出窗口.<br />
  </p>
  <p>如果希望在当前窗口中打开链接,则要采取一点技巧，使用一个代理窗口打开网页，在代理窗口中获取网址以后再停止导航并使用当前窗口打开网页.示例如下:<br />
</p>
<p><strong>3、调用示例：
</strong></p>
  </p>
  <pre>wb.NewWindow2=function( ppDisp, Cancel) {
　
	return owner.openproxy /*创建代理窗口捕获网址并在当前窗口打开*/   
} </pre>
</div>
<div>
  <h2>wb.NewWindow3 </h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.NewWindow3=function(ppDisp, Cancel,dwFlags,bstrUrlContext, bstrUrl ) {
 	 
	io.print(  ppDisp, Cancel,dwFlags,bstrUrlContext, bstrUrl  )
} </pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    win xp sp2以上版本的win操作系统支持此事件,ppDisp, Cancel是输出参数,使用方法与wb.NewWindow2类似.<br />
    而wb.NewWindow3多了一些参数,其中bstrUrlContext指为打开新窗口的源网页url,而bstrUrl为即将打开的目标url,dwFlags可选值如下</p>
  <table class="dataintable">
    <tr>
      <th>dwFlags</th>
      <th>说明</th>
    </tr>
    <tr><td>_NWMF_UNLOADING = 0x00000001,
</td>
    <td>在原网页关闭时弹出的窗口</td></tr><tr><td>_NWMF_SHOWHELP = 0x00000010
</td>
<td>在脚本中调用window showHelp 显示的窗口</td></tr><tr><td>_NWMF_HTMLDIALOG = 0x00000020
</td>
<td>显示HTML对话框</td></tr><tr><td>_NWMF_USERREQUESTED = 0x00000080
</td>
<td>用户请求打开的新窗口</td></tr><tr><td>_NWMF_FORCEWINDOW = 0x00010000
</td>
<td>弹出窗口</td></tr>
  </table>
  <p>&nbsp;</p></div>
<div>
  <h2>wb.CommandStateChange<a name="CommandStateChange" id="CommandStateChange"></a></h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.CommandStateChange = function(cmd,enable) {
 
} </pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br />
    当命令的激活状态改变时触发。它表明何时激活或关闭Back和Forward菜单项或按钮.<br />
    enable参数说明指定的命令是否可用,而cmd可选参数如下:
  </p>
  <table class="dataintable">
    <tr>
      <th>cmd</th>
      <th>说明</th>
    </tr>
    <tr>
      <td>_CSC_UPDATECOMMANDS</td>
      <td>是否可以刷新控制按钮、工具栏</td>
    </tr>
    <tr>
      <td>_CSC_NAVIGATEFORWARD </td>
      <td>前进命令是否可用</td>
    </tr>
    <tr>
      <td>_CSC_NAVIGATEBACK</td>
      <td>后退命令是否可用</td>
    </tr>
</table>
  <p>&nbsp;</p>
</div>
<div>
  <h2>wb.DownloadBegin </h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.DownloadBegin=function(){

}</pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br /> 
    一个下载开始时触发此事件,刷新也可触发此事件.</p>
</div>
<div>
  <h2>wb.DownloadComplete <a name="DownloadComplete" id="DownloadComplete"></a></h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.DownloadComplete=function(){

}</pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br />
    一个下载完成时触发此事件,刷新也可触发此事件.</p>
</div>
<div>
  <h2>wb.BeforeNavigate2</h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.BeforeNavigate2=function( pDisp, url
    , Flags, TargetFrameName, PostData, Headers, Cancel ) { 
 
    return   url, Flags, TargetFrameName, PostData, Headers,Cancel;
} </pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br />
  导航(打开网址)以前触发此事件.刷新不触发<br />
  pDisp web窗体对象 <br />
  url 要打开的网址<br />
  Flags 标志值 <br />
  TargetFrameName 目标框<br />
  PostData 提交的表单数据<br />
  Headers HTTP请求头<br />
  Cancel 是否取消导航</p>
  <p>除第一个参数pDisp以外,其他参数都是输出参数.返回值要按下面的顺序:<br />
    <pre><span class="kw">return</span>   url, Flags, TargetFrameName, PostData, Headers,Cancel;</pre></p>
  <p>不需要返回值的输出参数可以省略或传递null值,例如:    <br />
    <pre><span class="kw">return</span>   null, , , , ,true; </pre>   
    <br />
  </p>
</div>
<div>
  <h2>wb.NavigateComplete2</h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.NavigateComplete2 = function(pDisp, url){

}</pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br />
  每次导航完成触发此函数.刷新不触发.<br />
  pDisp为浏览器对象,url为导航网址.</p>
</div>
<div>
  <h2>wb.NavigateComplete</h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.NavigateComplete = function(pDisp, url){

}</pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br />
  每次导航完成触发此函数.刷新不触发.<br />
  pDisp为浏览器对象,url为导航网址.</p>
</div>
<div>
  <h2>wb.NavigateError</h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.NavigateError=function(pDisp,url,target,statusCode,cancel){

    return url,target,statusCode,cancel
}</pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br /> 
    导航出错时触发此函数,参数说明:<br />
  pDisp 浏览器对象.<br />
  url 出错的网址.<br />
  target 打开该网址的窗口名字<br />
  statusCode 错误代码<br />
  cancel 这是一个输出参数,指示是否取消导航到默认的错误页面.<br />
  <br />
  输出参数返回顺序为: <br />
  </p>
  <pre>return url,target,statusCode,cancel</pre>
</div>
<div>
  <h2>wb.FileDownload</h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.FileDownload=function(activeDocument, cancel){

    return cancel;
}</pre>
  <p><br />
    <strong>2、函数说明：</strong><br />
    <br /> 
    此函数在下载以前触发,有两个参数,<br />
    activeDocument表示打开的目标文件 - 是不是可直接显示在窗口的活动文档.<br />
  一般普通网页activeDocument为true,而需要弹出下载文件对话框时activeDocument参数的值为false.</p>
  <p><strong>3、调用示例：
  </strong></p>
  </p>
  <pre>wb.FileDownload=function(activeDocument, cancel){
	if( activeDocument )
   	return true; <span class="comment">//禁止弹出下载文件对话框</span>
}</pre>
</div>
<div>
  <h2>wb.TitleChange </h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre>wb.TitleChange=function( 网页标题 ) {
 
} </pre>
  <p><br />
    <strong>2、函数说明：</strong><br /></p>
  <p>网页标题改变时触发此事件,默认的网页标题并不显示在窗口标题栏上.</p>
</div>
<div>
  <h2>wb.WindowClosing </h2>
  <p>&nbsp;</p>
  <p><strong>1、函数原型：</strong><br />
  </p>
  <pre class="codeblock">wb.WindowClosing = function( IsChildWindow, Cancel ) {
    return true ; //返回真阻止窗口关闭
}  </pre>
  <p><br />
    <strong>2、函数说明：</strong><br /></p>
  <p>在网页脚本中调用 window.close() 函数关闭网页窗口时触发此函数,在函数中返回true阻止窗口关闭.<br />
  如果参数 IsChildWindow  为真,该窗口为网页脚本创建的子窗口.</p>
</div>
<div>
  <h2>&nbsp;</h2>
</div>
</div></body>
</html>